// 对a函数进行修改，保证每次调用a都能+1
function a () {
  var num = 1
}
function a () {
  var num = 1
  return () => {
    num++
    return num
  }
};

// 三．	对数组降维
var arr = [1, [2, [3]], 4]
function Jw (obj) {
  return Array.prototype.concat.apply([], obj);
}
Jw(arr);
// or 
function flatten (arr) {
  return arr
    .toString()
    .split(',')
    .map(function (item) {
      return Number(item);
    });
}

var arr = [1, [2, [3]], 4]
// 字符串去重
var str = 'hewjejwjehsdsbdnbsdsnbd'
let arr = str.split('');
arr = [...new Set(arr)].join;
arr = a => [...new Set(a)](arr).join('');

// or
const arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7, 8, 8, 0, 8, 6, 3, 4, 56, 2];
let arr2 = arr.filter((x, index, self) => {
  // self:表示该数组对象
  // x: 表示当前对象
  // index: 表示当前元素下标
  return self.indexOf(x) === index;
});


// 五. 写一个函数，实现对一个数字每3位加一个逗号，如输入100000， 输出100,000
let b = a();
var arr = []
function main (num) {
  if (num === null) {
    var n = parseInt(num).toString() // 取整后转字符串
    s(num)
  }
}

function s (num) {
  if (num.length > 3) {
    arr[arr.length] = num.slice(-3) // slice方法负数参数 后取, 后取三位数字保存数组中
    s(num.slice(0, -3)) //递归重复取值直到 不足3位
  } else {
    arr[arr.length] = num
  }
}

main(10000)

//  reverse倒叙输出
arr.reverse().join(',')